package com.tdd;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

import java.math.BigDecimal;

import org.junit.Before;
import org.junit.Test;

public class FactorialTest {
	Factorial factorial;
	HpStack stack;
	
	@Before
	public void init() {
	factorial = new Factorial();
	stack = new HpStack();
	}
	
	@Test
	public void factorialOf5Is120() {
		stack.push(new BigDecimal(5));
		factorial.operate(stack);
		assertEquals(120, stack.peek());
	}

	@Test(expected=RuntimeException.class)
	public void factorialOfNegativeOneGeneratesException() {
		stack.push(new BigDecimal(-1));
		factorial.operate(stack);
	}

	@Test
	public void factorialOf1Is1() {
		stack.push(BigDecimal.ONE);
		factorial.operate(stack);
		assertEquals(1, stack.peek());
	}

	@Test
	public void factorialOf0Is1() {
		stack.push(BigDecimal.ZERO);
		factorial.operate(stack);
		assertEquals(1, stack.peek());
	}
}
